package framework;


import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Timer;

import contenu.OperationsContenuImpl;
import contenu.NewsServer;
import depot.OperationsDepotImpl;
import forum.ForumImpl;
import message.OperationsMessageImpl;
import agenda.AgendaImpl;
import annuaire.AnnuaireImpl;
import reservation.LesRessourcesImpl;
import tchat.OperationsSalonsImpl;
import utilisateur.UtilisateurImpl;

public class LanceServeur {
	public static void main(String[] args) {
		try {
			// Cr�ation du registre RMI
			Registry r = LocateRegistry.createRegistry(1099);
			// Ajout de le r�f�rence de ce registre dans le registre (pour que les clients puissent r�cup�rer ou ajouter des objets dans ce registre)
			r.rebind("registre",r);
			
			// Gestion des utilisateurs du r�seau social
			UtilisateurImpl ut = new UtilisateurImpl();
			r.rebind("utilisateurs", ut);
			
			// Gestionnaire du d�pot de fichier
			OperationsDepotImpl op = new OperationsDepotImpl();
			r.rebind("depot", op);
			
			// Gestionnaire des messages priv�s
			OperationsMessageImpl pm = new OperationsMessageImpl(ut);
			r.rebind("messages_prives", pm);
			
			//Gestionnaire des news/contenu
			NewsServer news = new NewsServer(100); 
			OperationsContenuImpl oc = new OperationsContenuImpl(news);
			r.rebind("news", oc); 
			
			// Gestionnaire du tchat
			OperationsSalonsImpl si = new OperationsSalonsImpl(ut);
			r.rebind("tchat", si);
			
			// Gestionnaire de l'annuaire
			AnnuaireImpl an = new AnnuaireImpl();
			r.rebind("annuaire", an);
			
			//Gestion du forum
			ForumImpl fo = new ForumImpl();
			r.rebind("forum", fo);
			
			// Gestionnaire des ressources réservables
			LesRessourcesImpl re = new LesRessourcesImpl();
			r.rebind("lesRessources", re);

			// Gestionnaire des réservations
			AgendaImpl ag = new AgendaImpl();
			r.rebind("agenda", ag);
			
			// Sauvegarde automatique
			SauvegardeAutomatique sauv = new SauvegardeAutomatique(ut, re);
			Timer timer = new Timer(true); // Le timer se répète toutes les 10 min
			timer.schedule(sauv, 10*1000*60);
			
			System.out.println("Serveur lance");
			
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
}
